/**
 * 虚拟节点类
 */
class VNode {
  tag: string;
  props: Record<string, any>;
  children: VNode[] | string | null;
  key: string | number | null;
  text: string | null;
  el: string | HTMLElement | null | Text;

  /**
   * 虚拟节点构造函数
   * @param tag 标签名（如 'div'）
   * @param props 属性（如 { id: 'app' }）
   * @param children 子节点（数组，元素为 VNode 或文本）
   * @param key 节点唯一标识
   * @param text 文本节点内容（文本节点时生效）
   */
  constructor(
    tag: string,
    props = {},
    children: Array<VNode> | string | null = [],
    key = null,
    text: string | null = null
  ) {
    this.tag = tag; // 标签名（如 'div'）
    this.props = props; // 属性（如 { class: 'app' }）
    this.children = children; // 子节点（数组，元素为 VNode 或文本）
    this.key = key; // 节点唯一标识
    this.text = text; // 文本节点内容（文本节点时生效）
    this.el = null; // 对应的真实 DOM 元素（创建后挂载）
  }
}
export default VNode;
